#!/usr/bin/env node

/**
 * 测试脚本：验证 OP.GG MCP 服务器是否正常工作
 * 这个脚本会模拟 MCP 客户端的行为来测试服务器功能
 */

import { spawn } from 'child_process';
import { setTimeout } from 'node:timers/promises';

const testMCPServer = async () => {
  console.log('🚀 开始测试 OP.GG MCP 服务器...');
  
  // 启动 MCP 服务器进程
  const serverProcess = spawn('node', ['dist/index.js'], {
    stdio: ['pipe', 'pipe', 'pipe'],
    cwd: process.cwd()
  });

  let serverOutput = '';
  let serverError = '';

  // 监听服务器输出
  serverProcess.stdout.on('data', (data) => {
    serverOutput += data.toString();
    console.log('📤 服务器输出:', data.toString().trim());
  });

  serverProcess.stderr.on('data', (data) => {
    serverError += data.toString();
    console.log('❌ 服务器错误:', data.toString().trim());
  });

  // 发送 MCP 初始化请求
  const initRequest = {
    jsonrpc: '2.0',
    id: 1,
    method: 'initialize',
    params: {
      protocolVersion: '2024-11-05',
      capabilities: {
        roots: {
          listChanged: true
        },
        sampling: {}
      },
      clientInfo: {
        name: 'test-client',
        version: '1.0.0'
      }
    }
  };

  console.log('📨 发送初始化请求...');
  serverProcess.stdin.write(JSON.stringify(initRequest) + '\n');

  // 等待响应
  await setTimeout(2000);

  // 发送工具列表请求
  const listToolsRequest = {
    jsonrpc: '2.0',
    id: 2,
    method: 'tools/list',
    params: {}
  };

  console.log('📨 发送工具列表请求...');
  serverProcess.stdin.write(JSON.stringify(listToolsRequest) + '\n');

  // 等待响应
  await setTimeout(3000);

  // 关闭服务器
  console.log('🛑 关闭服务器...');
  serverProcess.kill('SIGTERM');

  // 等待进程结束
  await new Promise((resolve) => {
    serverProcess.on('close', (code) => {
      console.log(`✅ 服务器进程结束，退出代码: ${code}`);
      resolve();
    });
  });

  // 分析结果
  console.log('\n📊 测试结果分析:');
  console.log('- 服务器输出长度:', serverOutput.length);
  console.log('- 错误输出长度:', serverError.length);
  
  if (serverError.length > 0) {
    console.log('⚠️  发现错误输出:', serverError);
  }
  
  if (serverOutput.includes('jsonrpc')) {
    console.log('✅ 检测到 JSON-RPC 响应，服务器可能正常工作');
  } else {
    console.log('❌ 未检测到预期的 JSON-RPC 响应');
  }
};

// 错误处理
process.on('uncaughtException', (error) => {
  console.error('💥 未捕获的异常:', error);
  process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
  console.error('💥 未处理的 Promise 拒绝:', reason);
  process.exit(1);
});

// 运行测试
testMCPServer().catch((error) => {
  console.error('💥 测试失败:', error);
  process.exit(1);
});